import scrapy
import re
import json
from ..items import EkkoItem

class ExampleSpider(scrapy.Spider):
    name = 'example'                    # 属性name:必须村你再,scrapy的启动名称
    # allowed_domains = ['example.com']   # 运气爬虫爬取的范围限定
    start_urls = ['https://search.51job.com/list/010000,000000,0000,00,9,99,%25E9%2594%2580%25E5%2594%25AE,2,1.html']# 定义初始的url

    # 重载方法,用于翻页
    def start_requests(self):
        for i in range(1, 1112):
            url = "https://search.51job.com/list/010000,000000,0000,00,9,99,%25E9%2594%2580%25E5%2594%25AE,2,{}.html".format(
                i)
            yield scrapy.Request(url)  # 有默认的第二个参数,callback=..回调函数,不写默认是parse,也就是上面的,会调用parse方法

    # 重载的父类的方法,解析第一个请求( 上面的start_url )回来的response
    def parse(self, response):
        # 此名称不可修改,解析第一个请求回来的response
        # print(response.text)  # 经过解码后的字符串
        # 对于返回的数据进行获取,使用正则获取匹配
        rule = "window.__SEARCH_RESULT__ = (.*?)</script>"
        res = re.findall(rule, response.text)[0]  # 通过正则获取到我们需要的数据段
        data = json.loads(res)      # 此时需要转换一下格式
        print(data['engine_search_result'])
        for i in data['engine_search_result']:

            #  工作链接
            job_href = i["job_href"]

            # 进入新的页面需要再发送新的yield方法
            yield scrapy.Request(job_href, callback=self.parse1)  # 指定回调方法是parse1

    def parse1(self, res):
        # 在新的页面进行新的数据获取
        job_name = res.xpath('//h1/@title').getall()  # 获取xpath匹配后的内容列表
        salary = res.xpath('//div[@class="cn"]/strong/text()')  # [<Selector xpath='//div[@class="cn"]/strong/text()' data='0.8-2万/月'>]
        salary = salary.getall()    # ['1-1.5万/月']
        if not salary:    # 工资为空则写面议
            salary = ["面议"]

        # 实例化item对象,将数据存进item里面,
        item = EkkoItem()
        item["job_name"] = job_name,
        item["job_salary"] = salary,
        yield item   # 把item对象yield给item,然后使用piplines管道进行存储
